package com.sh.rpc.server.tcp;

import com.sh.rpc.server.HttpServer;
import io.vertx.core.Vertx;
import io.vertx.core.buffer.Buffer;
import io.vertx.core.net.NetServer;

/**
 * tcp服务端
 * @author SH
 */
public class VertxTcpServer implements HttpServer {

    private byte[] handleRequest(byte[] requestData) {
        // todo 根据请求数据处理请求，返回响应数据
        return "hello, this is tcp server".getBytes();
    }


    @Override
    public void doStart(int port) {
        // Vertx 实例
        Vertx vertx = Vertx.vertx();

        // tcp服务端
        NetServer server = vertx.createNetServer();

        // 处理请求
        server.connectHandler(socket->{

            // 接收请求数据  处理连接  处理请求
            socket.handler(buffer->{
               // 处理接收到的请求数据
                byte[] requestData = buffer.getBytes();
                // 解析收到的请求数据字节数组    根据我的需要解析
                byte[] responseData = handleRequest(requestData);  // 暂时是返回 hello tcp server
                System.out.println("received request: " + new String(requestData));
                // 发送响应数据
                socket.write(Buffer.buffer(responseData));
            });
        });


        // 启动服务器   监听端口
        server.listen(port, result->{
           if (result.succeeded()){
               System.out.println("tcp server is listening on port: " + port);
           }else {
               System.err.println("Failed to start the TCP server" + result.cause());
           }
        });
    }

    public static void main(String[] args) {
        new VertxTcpServer().doStart(9999);
    }





}
